With the rise of computer systems and the ever increasing reliance of industries, businesses, and individuals on the use of electronic data there has arisen a need to be able to successfully store and retrieve large amounts of data in electronic form in a fast, efficient and economical way. For purposes of storing electronic data, hereinafter simply referred to as data, data is often broken up into blocks of a particular size. For example, data may be broken into 4 kilobyte blocks referred to as 4k blocks of data.
One important aspect of data storage and retrieval is that the integrity of the data should be maintained with the data retrieved by a read operation being the same as the data that was stored by a previous write operation. Another important aspect is the speed at which the data may be stored and retrieved. In some known systems, the data to be stored is distributed across a number of data storage elements, e.g., hard disk and/or solid state drives.
In some known systems, because of the time it takes to check for errors when previously stored data is read from a storage device such known systems typically use light weight error correction techniques such as for example single bit error detection techniques. Single bit error detection techniques such as a simple parity check is easy to implement, e.g., the bits are XORed and the result is compared to a parity check bit that is stored with the data. The parity check may be performed on relatively small data units, e.g., a set of a few or hundreds of bits. While a parity check is easy to implement, it has the disadvantage that if an even number of bits have errors, e.g., there is a two bit error, the error may go undetected by the parity check. Thus a multi-bit error can result in an undetected read data error when two or more bit errors mask the error leaving it undetected by the parity check operation.
Absent the parity check failing, most drive systems normally return the data read from the disk without performing additional checks on the data even though the system may store additional error correction and/or detection information such as a set of parity bits, e.g., on a different data storage device than the data storage device from which the data was read, for use in the case of detection of a read error. Moreover, the light weight error checks which are implemented in a drive such as CRC parity checks and BCH checks do not detect errors introduced by a noisy channel for example a channel experiencing electromagnetic interference (EMI). This is so because the drive error checks are made at the drive not have the data has been read.
It should be appreciated that there is a need for data processing methods and apparatus that can increase data storage integrity by increasing the number of read errors detected and which can provide higher levels of bit error detection on read operations than is provided by the current light weight error detection techniques such as a simple single bit parity check. While improved error detection techniques are desirable, it is desirable that new or improved error detection techniques used for read operations do not introduce excessive amounts of additional processing and/or delays with regard to each read operation.